import streamlit as st
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import numpy as np
from datetime import datetime, timedelta
import random
import hashlib

# 页面配置已在主应用中设置

# 页面标题
st.title("🔍 质量控制系统")
st.markdown("---")

# 侧边栏导航
st.sidebar.title("功能导航")
page_selection = st.sidebar.selectbox(
    "选择功能模块",
    ["质量概览", "检验管理", "不合格品管理", "质量分析", "SPC控制", "审核管理", "改进管理"]
)

# 质量概览页面
if page_selection == "质量概览":
    st.header("📊 质量概览")
    
    # 质量关键指标
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric(
            label="整体合格率",
            value="98.7%",
            delta="+0.3%"
        )
    
    with col2:
        st.metric(
            label="一次通过率",
            value="95.2%",
            delta="+1.1%"
        )
    
    with col3:
        st.metric(
            label="客户投诉",
            value="3件",
            delta="-2件"
        )
    
    with col4:
        st.metric(
            label="返工成本",
            value="¥12,500",
            delta="-¥3,200"
        )
    
    # 质量趋势图表
    col1, col2 = st.columns(2)
    
    with col1:
        # 合格率趋势
        dates = pd.date_range(start='2024-01-01', end='2024-12-31', freq='D')
        quality_trend = pd.DataFrame({
            '日期': dates,
            '合格率': [98 + 2*np.sin(i*2*np.pi/365) + np.random.normal(0, 0.5) 
                     for i in range(len(dates))]
        })
        
        fig_quality = px.line(quality_trend, x='日期', y='合格率',
                            title="产品合格率趋势")
        fig_quality.add_hline(y=98, line_dash="dash", line_color="red", 
                            annotation_text="目标合格率")
        st.plotly_chart(fig_quality, use_container_width=True)
    
    with col2:
        # 不合格原因分布
        defect_reasons = pd.DataFrame({
            '不合格原因': ['尺寸偏差', '表面缺陷', '功能异常', '包装问题', '材料问题', '其他'],
            '数量': [45, 28, 15, 8, 12, 4],
            '占比': ['40.2%', '25.0%', '13.4%', '7.1%', '10.7%', '3.6%']
        })
        
        fig_defects = px.pie(defect_reasons, values='数量', names='不合格原因',
                           title="不合格原因分布")
        st.plotly_chart(fig_defects, use_container_width=True)
    
    # 各产品线质量状况
    st.subheader("各产品线质量状况")
    
    product_quality = pd.DataFrame({
        '产品线': [f'产品线{i}' for i in range(1, 9)],
        '产品': ['产品A', '产品B', '产品C', '产品D', '产品E', '产品F', '产品G', '产品H'],
        '检验批次': [156, 142, 178, 134, 98, 167, 145, 123],
        '合格批次': [154, 139, 175, 132, 96, 164, 142, 121],
        '合格率': ['98.7%', '97.9%', '98.3%', '98.5%', '98.0%', '98.2%', '97.9%', '98.4%'],
        '主要问题': ['尺寸偏差', '表面质量', '功能测试', '包装缺陷', '材料问题', '尺寸偏差', '表面质量', '功能测试'],
        '改进状态': ['进行中', '已改进', '进行中', '已改进', '计划中', '进行中', '已改进', '进行中']
    })
    
    # 根据合格率设置行颜色
    # 使用缓存来避免重复计算样式，减少表格抖动
    def highlight_quality_status(row):
        quality_rate = float(row['合格率'].replace('%', ''))
        if quality_rate >= 98.5:
            return ['background-color: #e8f5e8'] * len(row)
        elif quality_rate >= 98.0:
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #ffebee'] * len(row)
    
    styled_product_quality = product_quality.style.apply(highlight_quality_status, axis=1)
    st.dataframe(styled_product_quality, use_container_width=True)
    
    # 质量预警
    st.subheader("质量预警")
    
    alerts = [
        {"级别": "🔴 高", "内容": "产品B表面质量问题增加，需立即关注", "时间": "2024-03-15 14:30"},
        {"级别": "🟡 中", "内容": "产品线7合格率连续3天低于目标值", "时间": "2024-03-15 10:15"},
        {"级别": "🟡 中", "内容": "供应商X原材料质量波动较大", "时间": "2024-03-15 09:20"},
        {"级别": "🟢 低", "内容": "检验设备A需要校准", "时间": "2024-03-14 16:45"}
    ]
    
    for alert in alerts:
        if "🔴" in alert["级别"]:
            st.error(f"{alert['级别']} {alert['内容']} - {alert['时间']}")
        elif "🟡" in alert["级别"]:
            st.warning(f"{alert['级别']} {alert['内容']} - {alert['时间']}")
        else:
            st.info(f"{alert['级别']} {alert['内容']} - {alert['时间']}")

# 检验管理页面
elif page_selection == "检验管理":
    st.header("🔬 检验管理")
    
    # 检验计划
    st.subheader("检验计划")
    
    col1, col2, col3 = st.columns(3)
    
    with col1:
        inspection_type = st.selectbox("检验类型", ["进料检验", "过程检验", "成品检验", "出货检验"])
        product_select = st.selectbox("产品选择", ["产品A", "产品B", "产品C", "产品D", "产品E"])
    
    with col2:
        batch_number = st.text_input("批次号", "BATCH20240315001")
        sample_size = st.number_input("抽样数量", min_value=1, value=50)
    
    with col3:
        inspector = st.selectbox("检验员", ["王检验", "李检验", "张检验", "赵检验"])
        
        if st.button("创建检验任务", type="primary"):
            st.success("检验任务创建成功！")
    
    # 检验任务列表
    st.subheader("检验任务列表")
    
    inspection_tasks = pd.DataFrame({
        '任务编号': [f'INS{i:06d}' for i in range(1, 16)],
        '检验类型': ['进料检验', '过程检验', '成品检验', '出货检验'] * 4 + ['进料检验', '过程检验', '成品检验'],
        '产品/物料': ['原材料A', '产品A', '产品B', '产品C', '原材料B', '产品D', '产品E', '产品A', 
                    '原材料C', '产品B', '产品C', '产品D', '原材料D', '产品E', '产品A'],
        '批次号': [f'BATCH{i:010d}' for i in range(20240315001, 20240315016)],
        '抽样数量': [50, 30, 40, 35, 60, 25, 45, 55, 40, 30, 50, 35, 45, 40, 30],
        '检验员': ['王检验', '李检验', '张检验', '赵检验', '王检验'] * 3,
        '状态': ['待检验', '检验中', '已完成', '已完成', '待检验', '检验中', '已完成', '已完成', 
               '待检验', '检验中', '已完成', '已完成', '待检验', '检验中', '已完成'],
        '计划时间': [f'2024-03-{15+i//4} {8+i%8}:00' for i in range(15)],
        '结果': ['', '进行中', '合格', '合格', '', '进行中', '合格', '不合格', 
               '', '进行中', '合格', '合格', '', '进行中', '合格']
    })
    
    # 根据状态设置行颜色
    def highlight_inspection(row):
        if row['结果'] == '不合格':
            return ['background-color: #ffebee'] * len(row)
        elif row['状态'] == '检验中':
            return ['background-color: #fff3e0'] * len(row)
        elif row['结果'] == '合格':
            return ['background-color: #e8f5e8'] * len(row)
        else:
            return ['background-color: #f5f5f5'] * len(row)
    
    styled_inspection_tasks = inspection_tasks.style.apply(highlight_inspection, axis=1)
    st.dataframe(styled_inspection_tasks, use_container_width=True)
    
    # 检验标准管理
    st.subheader("检验标准管理")
    
    inspection_standards = pd.DataFrame({
        '标准编号': [f'STD{i:04d}' for i in range(1, 11)],
        '标准名称': [f'检验标准{chr(65+i)}' for i in range(10)],
        '适用产品': ['产品A', '产品B', '产品C', '产品D', '产品E'] * 2,
        '检验项目': ['尺寸测量', '外观检查', '功能测试', '包装检验', '材料检测'] * 2,
        '技术要求': ['±0.1mm', '无划痕', '功能正常', '包装完整', '符合标准'] * 2,
        '检验方法': ['卡尺测量', '目视检查', '功能测试', '外观检查', '化学分析'] * 2,
        '版本': ['V2.1', 'V1.8', 'V3.0', 'V2.3', 'V1.5'] * 2,
        '状态': ['有效', '有效', '有效', '有效', '有效'] * 2
    })
    
    st.dataframe(inspection_standards, use_container_width=True)
    
    # 检验设备管理
    st.subheader("检验设备管理")
    
    col1, col2 = st.columns(2)
    
    with col1:
        equipment_list = pd.DataFrame({
            '设备编号': [f'TEST{i:03d}' for i in range(1, 11)],
            '设备名称': ['三坐标测量机', '表面粗糙度仪', '硬度计', '拉力试验机', '显微镜',
                      '色差仪', '厚度计', '电子天平', '温湿度计', '噪音计'],
            '状态': ['正常', '正常', '校准中', '正常', '维修中', '正常', '正常', '正常', '正常', '正常'],
            '校准日期': ['2024-02-15', '2024-01-20', '2024-03-10', '2024-02-28', '2024-01-15',
                       '2024-02-20', '2024-03-05', '2024-02-10', '2024-01-25', '2024-03-01'],
            '下次校准': ['2024-08-15', '2024-07-20', '2024-09-10', '2024-08-28', '2024-07-15',
                       '2024-08-20', '2024-09-05', '2024-08-10', '2024-07-25', '2024-09-01']
        })
        
        # 根据设备状态设置行颜色
        def highlight_equipment(row):
            if row['状态'] == '维修中':
                return ['background-color: #ffebee'] * len(row)
            elif row['状态'] == '校准中':
                return ['background-color: #fff3e0'] * len(row)
            else:
                return ['background-color: #e8f5e8'] * len(row)
        
        styled_equipment_list = equipment_list.style.apply(highlight_equipment, axis=1)
        st.dataframe(styled_equipment_list, use_container_width=True)
    
    with col2:
        # 设备利用率
        equipment_utilization = pd.DataFrame({
            '设备': ['三坐标', '粗糙度仪', '硬度计', '拉力机', '显微镜'],
            '利用率': [85, 72, 68, 91, 56]
        })
        
        fig_utilization = px.bar(equipment_utilization, x='设备', y='利用率',
                               title="检验设备利用率")
        fig_utilization.add_hline(y=80, line_dash="dash", line_color="red", 
                                annotation_text="目标利用率")
        st.plotly_chart(fig_utilization, use_container_width=True)

# 不合格品管理页面
elif page_selection == "不合格品管理":
    st.header("❌ 不合格品管理")
    
    # 不合格品统计
    st.subheader("不合格品统计")
    
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric("本月不合格品", "112件", "-8件")
    
    with col2:
        st.metric("不合格率", "1.3%", "-0.2%")
    
    with col3:
        st.metric("返工数量", "89件", "-5件")
    
    with col4:
        st.metric("报废数量", "23件", "-3件")
    
    # 不合格品记录
    st.subheader("不合格品记录")
    
    nonconforming_records = pd.DataFrame({
        '记录编号': [f'NCR{i:06d}' for i in range(1, 21)],
        '产品': ['产品A', '产品B', '产品C', '产品D', '产品E'] * 4,
        '批次号': [f'BATCH{i:010d}' for i in range(20240301001, 20240301021)],
        '不合格数量': [5, 3, 8, 2, 6, 4, 7, 1, 9, 3, 5, 6, 2, 8, 4, 7, 3, 5, 6, 2],
        '不合格类型': ['尺寸偏差', '表面缺陷', '功能异常', '包装问题', '材料问题'] * 4,
        '严重程度': ['中', '高', '中', '低', '中', '高', '中', '低', '高', '中', 
                   '低', '中', '高', '中', '低', '中', '高', '低', '中', '高'],
        '发现工序': ['检验', '生产', '包装', '出货', '进料'] * 4,
        '处理方式': ['返工', '报废', '返工', '重新包装', '退货', '报废', '返工', '重新包装', 
                   '报废', '返工', '重新包装', '返工', '报废', '返工', '重新包装', '返工', '报废', '重新包装', '返工', '报废'],
        '处理状态': ['已处理', '已处理', '处理中', '已处理', '已处理', '处理中', '已处理', '已处理', 
                   '处理中', '已处理', '已处理', '处理中', '已处理', '已处理', '处理中', '已处理', '已处理', '处理中', '已处理', '已处理'],
        '责任部门': ['生产部', '生产部', '技术部', '包装部', '采购部'] * 4,
        '发现日期': [f'2024-03-{i:02d}' for i in range(1, 21)]
    })
    
    # 根据严重程度设置行颜色
    def highlight_severity(row):
        if row['严重程度'] == '高':
            return ['background-color: #ffebee'] * len(row)
        elif row['严重程度'] == '中':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_nonconforming_records = nonconforming_records.style.apply(highlight_severity, axis=1)
    st.dataframe(styled_nonconforming_records, use_container_width=True)
    
    # 不合格品分析
    st.subheader("不合格品分析")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 不合格类型分布
        defect_distribution = pd.DataFrame({
            '不合格类型': ['尺寸偏差', '表面缺陷', '功能异常', '包装问题', '材料问题'],
            '数量': [28, 24, 20, 16, 24],
            '占比': ['25.0%', '21.4%', '17.9%', '14.3%', '21.4%']
        })
        
        fig_defect_dist = px.pie(defect_distribution, values='数量', names='不合格类型',
                               title="不合格类型分布")
        st.plotly_chart(fig_defect_dist, use_container_width=True)
    
    with col2:
        # 月度不合格趋势
        months = ['1月', '2月', '3月', '4月', '5月', '6月']
        monthly_defects = pd.DataFrame({
            '月份': months,
            '不合格数量': [145, 132, 128, 118, 125, 112],
            '不合格率': [1.8, 1.6, 1.5, 1.4, 1.5, 1.3]
        })
        
        fig_monthly = px.line(monthly_defects, x='月份', y='不合格率',
                            title="月度不合格率趋势", markers=True)
        fig_monthly.add_hline(y=1.5, line_dash="dash", line_color="red", 
                            annotation_text="目标不合格率")
        st.plotly_chart(fig_monthly, use_container_width=True)
    
    # 纠正预防措施
    st.subheader("纠正预防措施(CAPA)")
    
    capa_records = pd.DataFrame({
        'CAPA编号': [f'CAPA{i:04d}' for i in range(1, 11)],
        '问题描述': [f'问题{i}：需要采取纠正措施' for i in range(1, 11)],
        '根本原因': ['设备精度', '操作不当', '材料问题', '工艺参数', '培训不足'] * 2,
        '纠正措施': ['设备校准', '加强培训', '更换供应商', '优化工艺', '技能培训'] * 2,
        '预防措施': ['定期校准', '标准化作业', '供应商审核', '工艺监控', '持续培训'] * 2,
        '负责人': ['张工', '李工', '王工', '赵工', '陈工'] * 2,
        '计划完成': [f'2024-{3+i//3}-{15+i%15:02d}' for i in range(10)],
        '状态': ['进行中', '已完成', '计划中', '进行中', '已完成'] * 2
    })
    
    # 根据状态设置行颜色
    def highlight_capa(row):
        if row['状态'] == '已完成':
            return ['background-color: #e8f5e8'] * len(row)
        elif row['状态'] == '进行中':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #f5f5f5'] * len(row)
    
    styled_capa_records = capa_records.style.apply(highlight_capa, axis=1)
    st.dataframe(styled_capa_records, use_container_width=True)

# 质量分析页面
elif page_selection == "质量分析":
    st.header("📈 质量分析")
    
    # 质量成本分析
    st.subheader("质量成本分析")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 质量成本构成
        quality_costs = pd.DataFrame({
            '成本类型': ['预防成本', '鉴定成本', '内部失效成本', '外部失效成本'],
            '金额': [50000, 80000, 35000, 15000],
            '占比': ['27.8%', '44.4%', '19.4%', '8.3%']
        })
        
        fig_cost = px.pie(quality_costs, values='金额', names='成本类型',
                        title="质量成本构成")
        st.plotly_chart(fig_cost, use_container_width=True)
    
    with col2:
        # 质量成本趋势
        months = ['1月', '2月', '3月', '4月', '5月', '6月']
        cost_trend = pd.DataFrame({
            '月份': months,
            '预防成本': [45000, 48000, 50000, 52000, 51000, 50000],
            '鉴定成本': [75000, 78000, 80000, 82000, 81000, 80000],
            '失效成本': [55000, 52000, 50000, 48000, 47000, 50000]
        })
        
        fig_cost_trend = px.line(cost_trend, x='月份', 
                               y=['预防成本', '鉴定成本', '失效成本'],
                               title="质量成本趋势")
        st.plotly_chart(fig_cost_trend, use_container_width=True)
    
    # 质量指标分析
    st.subheader("质量指标分析")
    
    # 创建多个子图
    fig_metrics = make_subplots(
        rows=2, cols=2,
        subplot_titles=('合格率趋势', '客户满意度', '返工率趋势', '供应商质量'),
        specs=[[{"secondary_y": False}, {"secondary_y": False}],
               [{"secondary_y": False}, {"secondary_y": False}]]
    )
    
    # 合格率趋势
    dates = pd.date_range(start='2024-01-01', periods=30, freq='D')
    pass_rate = [98 + 2*np.sin(i*2*np.pi/30) + np.random.normal(0, 0.3) for i in range(30)]
    fig_metrics.add_trace(
        go.Scatter(x=dates, y=pass_rate, name='合格率'),
        row=1, col=1
    )
    
    # 客户满意度
    satisfaction_data = ['很满意', '满意', '一般', '不满意']
    satisfaction_values = [65, 28, 5, 2]
    fig_metrics.add_trace(
        go.Bar(x=satisfaction_data, y=satisfaction_values, name='客户满意度'),
        row=1, col=2
    )
    
    # 返工率趋势
    rework_rate = [2 + 0.5*np.sin(i*2*np.pi/30) + np.random.normal(0, 0.2) for i in range(30)]
    fig_metrics.add_trace(
        go.Scatter(x=dates, y=rework_rate, name='返工率'),
        row=2, col=1
    )
    
    # 供应商质量
    suppliers = ['供应商A', '供应商B', '供应商C', '供应商D']
    supplier_quality = [98.5, 97.8, 99.1, 98.2]
    fig_metrics.add_trace(
        go.Bar(x=suppliers, y=supplier_quality, name='供应商质量'),
        row=2, col=2
    )
    
    fig_metrics.update_layout(height=600, showlegend=False)
    st.plotly_chart(fig_metrics, use_container_width=True)
    
    # 帕累托分析
    st.subheader("质量问题帕累托分析")
    
    pareto_data = pd.DataFrame({
        '问题类型': ['尺寸偏差', '表面缺陷', '功能异常', '材料问题', '包装问题', '其他'],
        '频次': [45, 28, 20, 15, 8, 4],
        '累计频次': [45, 73, 93, 108, 116, 120],
        '累计百分比': [37.5, 60.8, 77.5, 90.0, 96.7, 100.0]
    })
    
    fig_pareto = make_subplots(specs=[[{"secondary_y": True}]])
    
    # 添加柱状图
    fig_pareto.add_trace(
        go.Bar(x=pareto_data['问题类型'], y=pareto_data['频次'], name='频次'),
        secondary_y=False,
    )
    
    # 添加累计百分比线
    fig_pareto.add_trace(
        go.Scatter(x=pareto_data['问题类型'], y=pareto_data['累计百分比'], 
                  mode='lines+markers', name='累计百分比'),
        secondary_y=True,
    )
    
    # 设置y轴标题
    fig_pareto.update_yaxes(title_text="频次", secondary_y=False)
    fig_pareto.update_yaxes(title_text="累计百分比(%)", secondary_y=True)
    
    fig_pareto.update_layout(title_text="质量问题帕累托分析")
    st.plotly_chart(fig_pareto, use_container_width=True)
    
    # 质量改进建议
    st.subheader("质量改进建议")
    
    improvement_suggestions = [
        "🎯 重点关注尺寸偏差问题，占总问题的37.5%",
        "🔧 加强设备维护和校准，提高加工精度",
        "👥 加强员工培训，提升操作技能",
        "📊 建立更完善的质量数据分析系统",
        "🤝 加强与供应商的质量协作",
        "🔄 持续改进质量管理体系"
    ]
    
    for suggestion in improvement_suggestions:
        st.info(suggestion)

# SPC控制页面
elif page_selection == "SPC控制":
    st.header("📊 SPC统计过程控制")
    
    # SPC图表选择
    st.subheader("控制图选择")
    
    col1, col2, col3 = st.columns(3)
    
    with col1:
        chart_type = st.selectbox("控制图类型", ["X-R图", "X-S图", "P图", "C图", "U图"])
    
    with col2:
        product_spc = st.selectbox("产品选择", ["产品A", "产品B", "产品C", "产品D"])
    
    with col3:
        parameter = st.selectbox("控制参数", ["尺寸", "重量", "硬度", "表面粗糙度"])
    
    # X-R控制图
    if chart_type == "X-R图":
        st.subheader(f"{product_spc} - {parameter} X-R控制图")
        
        # 生成模拟数据
        np.random.seed(42)
        n_samples = 25
        sample_size = 5
        
        # 生成样本数据
        samples = []
        for i in range(n_samples):
            sample = np.random.normal(100, 2, sample_size)
            samples.append(sample)
        
        # 计算统计量
        x_bar = [np.mean(sample) for sample in samples]
        r_values = [np.max(sample) - np.min(sample) for sample in samples]
        
        # 计算控制限
        x_bar_mean = np.mean(x_bar)
        r_mean = np.mean(r_values)
        
        # X图控制限 (A2系数对于n=5是0.577)
        A2 = 0.577
        ucl_x = x_bar_mean + A2 * r_mean
        lcl_x = x_bar_mean - A2 * r_mean
        
        # R图控制限 (D3, D4系数对于n=5是0, 2.114)
        D3, D4 = 0, 2.114
        ucl_r = D4 * r_mean
        lcl_r = D3 * r_mean
        
        # 创建X图
        fig_x = go.Figure()
        fig_x.add_trace(go.Scatter(x=list(range(1, n_samples+1)), y=x_bar, 
                                 mode='lines+markers', name='X̄'))
        fig_x.add_hline(y=x_bar_mean, line_dash="solid", line_color="green", 
                       annotation_text="中心线")
        fig_x.add_hline(y=ucl_x, line_dash="dash", line_color="red", 
                       annotation_text="UCL")
        fig_x.add_hline(y=lcl_x, line_dash="dash", line_color="red", 
                       annotation_text="LCL")
        fig_x.update_layout(title="X̄控制图", xaxis_title="样本组", yaxis_title="均值")
        st.plotly_chart(fig_x, use_container_width=True)
        
        # 创建R图
        fig_r = go.Figure()
        fig_r.add_trace(go.Scatter(x=list(range(1, n_samples+1)), y=r_values, 
                                 mode='lines+markers', name='R'))
        fig_r.add_hline(y=r_mean, line_dash="solid", line_color="green", 
                       annotation_text="中心线")
        fig_r.add_hline(y=ucl_r, line_dash="dash", line_color="red", 
                       annotation_text="UCL")
        fig_r.add_hline(y=lcl_r, line_dash="dash", line_color="red", 
                       annotation_text="LCL")
        fig_r.update_layout(title="R控制图", xaxis_title="样本组", yaxis_title="极差")
        st.plotly_chart(fig_r, use_container_width=True)
        
        # 过程能力分析
        st.subheader("过程能力分析")
        
        col1, col2, col3 = st.columns(3)
        
        with col1:
            st.metric("Cp", "1.33", "")
            st.metric("Cpk", "1.28", "")
        
        with col2:
            st.metric("Pp", "1.31", "")
            st.metric("Ppk", "1.25", "")
        
        with col3:
            st.metric("过程标准差", "1.85", "")
            st.metric("过程均值", "99.8", "")
    
    # 控制图判异规则
    st.subheader("控制图判异规则")
    
    rules = [
        "规则1：单点超出控制限",
        "规则2：连续9点在中心线同一侧",
        "规则3：连续6点递增或递减",
        "规则4：连续14点交替上下",
        "规则5：连续3点中有2点距中心线超过2σ",
        "规则6：连续5点中有4点距中心线超过1σ",
        "规则7：连续15点在中心线±1σ内",
        "规则8：连续8点距中心线超过1σ"
    ]
    
    for i, rule in enumerate(rules, 1):
        st.write(f"{i}. {rule}")
    
    # 异常点分析
    st.subheader("异常点分析")
    
    anomaly_data = pd.DataFrame({
        '样本组': [8, 15, 22],
        '异常类型': ['超出上控制限', '连续递增', '超出下控制限'],
        '可能原因': ['设备故障', '工艺漂移', '原料变化'],
        '建议措施': ['检查设备', '调整工艺参数', '检验原料']
    })
    
    st.dataframe(anomaly_data, use_container_width=True)

# 审核管理页面
elif page_selection == "审核管理":
    st.header("🔍 审核管理")
    
    # 审核计划
    st.subheader("审核计划")
    
    audit_plan = pd.DataFrame({
        '审核编号': [f'AUDIT{i:04d}' for i in range(1, 11)],
        '审核类型': ['内部审核', '供应商审核', '客户审核', '认证审核', '内部审核'] * 2,
        '审核范围': ['生产部', '供应商A', '质量体系', 'ISO9001', '技术部'] * 2,
        '审核员': ['张审核', '李审核', '王审核', '外部审核员', '赵审核'] * 2,
        '计划日期': [f'2024-{3+i//3}-{10+i*2:02d}' for i in range(10)],
        '状态': ['计划中', '进行中', '已完成', '计划中', '已完成'] * 2,
        '审核标准': ['ISO9001', '供应商标准', 'ISO9001', 'ISO9001', 'ISO9001'] * 2
    })
    
    # 根据状态设置行颜色
    def highlight_audit(row):
        if row['状态'] == '已完成':
            return ['background-color: #e8f5e8'] * len(row)
        elif row['状态'] == '进行中':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #f5f5f5'] * len(row)
    
    styled_audit_plan = audit_plan.style.apply(highlight_audit, axis=1)
    st.dataframe(styled_audit_plan, use_container_width=True)
    
    # 审核发现
    st.subheader("审核发现")
    
    audit_findings = pd.DataFrame({
        '发现编号': [f'FIND{i:04d}' for i in range(1, 16)],
        '审核编号': [f'AUDIT{(i-1)//3+1:04d}' for i in range(1, 16)],
        '发现类型': ['不符合项', '观察项', '不符合项', '改进机会', '不符合项'] * 3,
        '严重程度': ['严重', '轻微', '一般', '轻微', '严重'] * 3,
        '涉及条款': ['7.1.1', '8.2.3', '4.4.1', '6.1.2', '8.5.1'] * 3,
        '问题描述': [f'发现问题{i}' for i in range(1, 16)],
        '责任部门': ['生产部', '质量部', '技术部', '管理部', '采购部'] * 3,
        '整改期限': [f'2024-{4+i//5}-{15+i:02d}' for i in range(15)],
        '整改状态': ['待整改', '整改中', '已整改', '待整改', '整改中'] * 3
    })
    
    # 根据严重程度设置行颜色
    def highlight_findings(row):
        if row['严重程度'] == '严重':
            return ['background-color: #ffebee'] * len(row)
        elif row['严重程度'] == '一般':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_audit_findings = audit_findings.style.apply(highlight_findings, axis=1)
    st.dataframe(styled_audit_findings, use_container_width=True)
    
    # 审核统计分析
    st.subheader("审核统计分析")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 发现类型分布
        finding_types = pd.DataFrame({
            '发现类型': ['不符合项', '观察项', '改进机会'],
            '数量': [9, 3, 3]
        })
        
        fig_findings = px.pie(finding_types, values='数量', names='发现类型',
                            title="审核发现类型分布")
        st.plotly_chart(fig_findings, use_container_width=True)
    
    with col2:
        # 部门发现分布
        dept_findings = pd.DataFrame({
            '部门': ['生产部', '质量部', '技术部', '管理部', '采购部'],
            '发现数量': [4, 3, 3, 3, 2]
        })
        
        fig_dept = px.bar(dept_findings, x='部门', y='发现数量',
                        title="各部门审核发现分布")
        st.plotly_chart(fig_dept, use_container_width=True)
    
    # 整改跟踪
    st.subheader("整改跟踪")
    
    corrective_actions = pd.DataFrame({
        '整改编号': [f'CA{i:04d}' for i in range(1, 11)],
        '发现编号': [f'FIND{i:04d}' for i in range(1, 11)],
        '整改措施': [f'整改措施{i}' for i in range(1, 11)],
        '负责人': ['张工', '李工', '王工', '赵工', '陈工'] * 2,
        '计划完成': [f'2024-{4+i//3}-{20+i:02d}' for i in range(10)],
        '实际完成': [f'2024-{4+i//3}-{18+i:02d}' if i < 6 else '' for i in range(10)],
        '验证状态': ['已验证', '已验证', '已验证', '已验证', '已验证', '待验证', '待验证', '待验证', '待验证', '待验证']
    })
    
    # 根据验证状态设置行颜色
    def highlight_corrective(row):
        if row['验证状态'] == '已验证':
            return ['background-color: #e8f5e8'] * len(row)
        else:
            return ['background-color: #fff3e0'] * len(row)
    
    styled_corrective_actions = corrective_actions.style.apply(highlight_corrective, axis=1)
    st.dataframe(styled_corrective_actions, use_container_width=True)

# 改进管理页面
elif page_selection == "改进管理":
    st.header("🚀 改进管理")
    
    # 改进项目概览
    st.subheader("改进项目概览")
    
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric("进行中项目", "8个", "+2个")
    
    with col2:
        st.metric("已完成项目", "15个", "+3个")
    
    with col3:
        st.metric("节约成本", "¥125万", "+¥25万")
    
    with col4:
        st.metric("质量提升", "2.3%", "+0.5%")
    
    # 改进项目列表
    st.subheader("改进项目列表")
    
    improvement_projects = pd.DataFrame({
        '项目编号': [f'IMP{i:04d}' for i in range(1, 16)],
        '项目名称': [f'质量改进项目{i}' for i in range(1, 16)],
        '改进类型': ['质量改善', '效率提升', '成本降低', '安全改进', '环境改善'] * 3,
        '发起部门': ['质量部', '生产部', '技术部', '安全部', '环保部'] * 3,
        '项目经理': ['张经理', '李经理', '王经理', '赵经理', '陈经理'] * 3,
        '开始日期': [f'2024-{1+i//4}-{10+i:02d}' for i in range(15)],
        '计划完成': [f'2024-{3+i//3}-{20+i:02d}' for i in range(15)],
        '当前状态': ['进行中', '已完成', '计划中', '进行中', '已完成'] * 3,
        '完成度': ['60%', '100%', '0%', '75%', '100%'] * 3,
        '预期收益': ['提升2%合格率', '节约10万成本', '减少5%能耗', '降低事故率', '减少废料20%'] * 3
    })
    
    # 根据状态设置行颜色
    def highlight_improvement(row):
        if row['当前状态'] == '已完成':
            return ['background-color: #e8f5e8'] * len(row)
        elif row['当前状态'] == '进行中':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #f5f5f5'] * len(row)
    
    styled_improvement_projects = improvement_projects.style.apply(highlight_improvement, axis=1)
    st.dataframe(styled_improvement_projects, use_container_width=True)
    
    # 改进效果分析
    st.subheader("改进效果分析")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 改进类型分布
        improvement_types = pd.DataFrame({
            '改进类型': ['质量改善', '效率提升', '成本降低', '安全改进', '环境改善'],
            '项目数量': [5, 4, 3, 2, 1]
        })
        
        fig_types = px.bar(improvement_types, x='改进类型', y='项目数量',
                         title="改进项目类型分布")
        st.plotly_chart(fig_types, use_container_width=True)
    
    with col2:
        # 月度改进效果
        months = ['1月', '2月', '3月', '4月', '5月', '6月']
        improvement_effects = pd.DataFrame({
            '月份': months,
            '质量提升': [0.5, 0.8, 1.2, 1.5, 1.8, 2.3],
            '成本节约': [15, 25, 40, 65, 95, 125]
        })
        
        fig_effects = px.line(improvement_effects, x='月份', 
                            y=['质量提升', '成本节约'],
                            title="月度改进效果")
        st.plotly_chart(fig_effects, use_container_width=True)
    
    # 最佳实践案例
    st.subheader("最佳实践案例")
    
    best_practices = [
        {
            "标题": "🏆 生产线A质量改进项目",
            "描述": "通过优化工艺参数和加强员工培训，将产品合格率从96.5%提升至98.7%",
            "收益": "年节约成本35万元，客户满意度提升15%",
            "关键措施": "工艺标准化、员工技能提升、设备精度改善"
        },
        {
            "标题": "🎯 检验效率提升项目",
            "描述": "引入自动化检测设备，将检验效率提升40%，检验准确率提升至99.5%",
            "收益": "减少人工成本20万元/年，提升检验能力30%",
            "关键措施": "设备自动化、流程优化、数据分析"
        },
        {
            "标题": "💡 供应商质量改进项目",
            "描述": "建立供应商质量管理体系，将来料合格率从95%提升至98.5%",
            "收益": "减少来料不良损失25万元/年，提升供应链稳定性",
            "关键措施": "供应商审核、质量协议、持续改进"
        }
    ]
    
    for practice in best_practices:
        with st.expander(practice["标题"]):
            st.write(f"**项目描述：** {practice['描述']}")
            st.write(f"**项目收益：** {practice['收益']}")
            st.write(f"**关键措施：** {practice['关键措施']}")
    
    # 改进建议
    st.subheader("持续改进建议")
    
    suggestions = [
        "📊 建立完善的质量数据分析系统，及时发现质量趋势",
        "🎓 加强员工质量意识培训，提升全员质量参与度",
        "🔧 推进质量管理数字化，提升管理效率",
        "🤝 深化与供应商的质量合作，共同提升质量水平",
        "🔄 建立质量改进的闭环管理机制",
        "📈 设立质量改进激励机制，调动员工积极性"
    ]
    
    for suggestion in suggestions:
        st.info(suggestion)

# 页面底部信息
st.markdown("---")
st.markdown(
    """
    <div style="text-align: center; color: #666; font-size: 0.9rem;">
        质量控制系统 | 数据更新时间: {}
    </div>
    """.format(datetime.now().strftime("%Y-%m-%d %H:%M:%S")),
    unsafe_allow_html=True
)